package com.junxonline.instant.admin.service.config;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junxonline.instant.dao.entity.dto.ui.TreeSelectNodeDTO;
import com.junxonline.instant.dao.entity.model.config.Organization;
import com.junxonline.instant.dao.entity.vo.config.OrganizationVO;
import com.junxonline.instant.common.entity.common.CommonRespPage;

import java.util.List;
import java.util.Set;

/**
 * 组织机构管理接口
 *
 * @author JunX
 * @date 2021-07-05
 */
public interface OrganizationService extends IService<Organization> {

    /**
     * 查询组织机构树（TreeSelect）
     *
     * @param wrapper 条件查询器
     * @return List<TreeSelectNodeDTO>
     */
    List<TreeSelectNodeDTO> queryOrganizationTree(QueryWrapper<Organization> wrapper);

    /**
     * 查询上级组织机构树（TreeSelect）
     *
     * @param vo      请求对象
     * @param wrapper 条件查询器
     * @return List<TreeSelectNodeDTO>
     */
    List<TreeSelectNodeDTO> queryParentTree(OrganizationVO vo, QueryWrapper<Organization> wrapper);

    /**
     * 查询组织机构列表
     *
     * @param vo      请求对象
     * @param wrapper 条件查询器
     * @return List<Organization>
     */
    CommonRespPage<Organization> queryList(OrganizationVO vo, QueryWrapper<Organization> wrapper);

    /**
     * 查询组织机构
     *
     * @param id ID
     * @return Organization
     */
    Organization query(Long id);

    /**
     * 新增组织机构
     *
     * @param organization 请求参数
     */
    void add(Organization organization);

    /**
     * 编辑组织机构
     *
     * @param organization 请求参数
     */
    void edit(Organization organization);

    /**
     * 删除组织机构
     *
     * @param ids 请求参数
     */
    void delete(List<Long> ids);

    /**
     * 查询机构的所有子机构ID
     *
     * @param organizationId 机构ID
     * @return Set<Long>
     */
    Set<Long> queryChildren(Long organizationId);

}
